home *** CD-ROM | disk | FTP | other *** search
- head 1.2;
- branch ;
- access ;
- symbols ;
- locks ; strict;
- comment @ * @;
-
-
- 1.2
- date 89.10.24.12.37.46; author brent; state Exp;
- branches ;
- next 1.1;
-
- 1.1
- date 88.04.17.10.20.46; author brent; state Exp;
- branches ;
- next ;
-
-
- desc
- @Client side code for pseudo-device benchmark
- @
-
-
- 1.2
- log
- @Updated to new C library, etc.
- @
- text
- @/*
- * client.c --
- *
- * The client part of a pseudo-device benchmark.
- * The routines here interface to the server; initial contact,
- * waiting for the start message, and notification of completion.
- *
- * Copyright 1986 Regents of the University of California
- * All rights reserved.
- */
-
- #ifndef lint
- static char rcsid[] = "$Header: /sprite/src/benchmarks/pdevtest/RCS/client.c,v 1.1 88/04/17 10:20:46 brent Exp Locker: brent $ SPRITE (Berkeley)";
- #endif not lint
-
-
- #include "sprite.h"
- #include "status.h"
- #include "errno.h"
- #include "stdio.h"
- #include "fs.h"
- #include "sys/file.h"
- #include "dev/pdev.h"
-
- extern char *pdev;
- extern Boolean selectP;
-
- static char buffer[4096];
- static int bufSize = sizeof(buffer);
-
- typedef struct ClientState {
- int clientStreamID;
- } ClientState;
-
- /*
- *----------------------------------------------------------------------
- *
- * ClientSetup --
- *
- * Establish contact with the server.
- *
- * Results:
- * A pointer to state about the clients needed by ClientStart and
- * ClientDone.
- *
- * Side effects:
- * Creates named pipes and communicates with server
- * This exits upon error.
- *
- *----------------------------------------------------------------------
- */
-
- void
- ClientSetup(dataPtr)
- ClientData *dataPtr;
- {
- ClientState *statePtr;
- ReturnStatus status;
-
- statePtr = (ClientState *)malloc(sizeof(ClientState));
-
- statePtr->clientStreamID = open(pdev, O_RDWR, 0);
- if (statePtr->clientStreamID < 0) {
- perror(pdev);
- exit(errno);
- }
- *dataPtr = (ClientData)statePtr;
- }
-
- /*
- *----------------------------------------------------------------------
- *
- * ClientRead --
- *
- * Read from a pseudo-device. The amount and number of repetitions
- * can be varied for measurment.
- *
- * Results:
- * None
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-
- void
- ClientRead(data, size, reps)
- ClientData data;
- int size;
- register int reps;
- {
- ClientState *statePtr;
- int amountRead;
- register ReturnStatus status;
- register char *bufPtr;
- register int i;
-
- if (size > bufSize) {
- bufPtr = (char *)malloc(size);
- } else {
- bufPtr = buffer;
- }
- statePtr = (ClientState *)data;
- for (i=0 ; i<reps ; i++) {
- amountRead = size;
- if (selectP) {
- int numReady;
- int mask = 1 << statePtr->clientStreamID;
- status = Fs_Select(32, NULL, &mask, NULL, NULL, &numReady);
- if (status != SUCCESS) {
- Stat_PrintMsg(status, "ClientRead: error on select");
- break;
- }
- }
- amountRead = read(statePtr->clientStreamID, bufPtr, size);
- if (amountRead < 0) {
- perror("ClientRead: error on read");
- break;
- } else if (amountRead != size) {
- fprintf(stderr, "Read #%d was short (%d < %d)\n",
- i, amountRead, size);
- break;
- }
- if (size > 0 && bufPtr[0] != 'z') {
- fprintf(stderr, "Bad data returned <%c>\n", bufPtr[0]);
- }
- }
- if (bufPtr != buffer) {
- free((char *)bufPtr);
- }
- }
-
- /*
- *----------------------------------------------------------------------
- *
- * ClientWrite --
- *
- * Write to a pseudo-device. The amount and number of repetitions
- * can be varied for measurment.
- *
- * Results:
- * None
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-
- void
- ClientWrite(data, size, reps)
- ClientData data;
- int size;
- register int reps;
- {
- ClientState *statePtr;
- int amountWrite;
- register ReturnStatus status;
- register char *bufPtr;
-
- if (size > bufSize) {
- bufPtr = (char *)malloc(size);
- } else {
- bufPtr = buffer;
- }
- statePtr = (ClientState *)data;
- do {
- amountWrite = write(statePtr->clientStreamID, bufPtr, size);
- if (amountWrite < 0) {
- perror("ClientWrite: error on write");
- break;
- } else if (amountWrite != size) {
- fprintf(stderr, "Short write %d < %d\n", amountWrite,
- size);
- }
- } while (--reps > 0);
- if (bufPtr != buffer) {
- free((char *)bufPtr);
- }
- }
-
- /*
- *----------------------------------------------------------------------
- *
- * ClientIOControl --
- *
- * Do an IOControl to a pseudo-device.
- * The amount of data passed in and number of repetitions
- * can be varied for measurment.
- *
- * Results:
- * None
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-
- void
- ClientIOControl(data, size, reps)
- ClientData data;
- int size;
- register int reps;
- {
- ClientState *statePtr;
- int amountRead;
- register ReturnStatus status;
- register char *inBuffer;
- register char *outBuffer;
- int command;
-
- if (size > bufSize) {
- inBuffer = (char *)malloc(size);
- outBuffer = (char *)malloc(size);
- } else {
- inBuffer = outBuffer = buffer;
- }
- statePtr = (ClientState *)data;
- do {
- extern Boolean switchBuf;
- if (switchBuf && (reps % 7) == 0) {
- command = IOC_PDEV_SET_BUF;
- } else {
- command = 8 << 16; /* To avoid range of generic I/O controls */
- }
- status = Fs_IOControl(statePtr->clientStreamID, command, size, inBuffer,
- size, outBuffer);
- if (status != SUCCESS) {
- Stat_PrintMsg(status, "ClientIOControl: error ");
- break;
- }
- } while (--reps > 0);
- if (inBuffer != buffer) {
- free((char *)inBuffer);
- free((char *)outBuffer);
- }
- }
-
- /*
- *----------------------------------------------------------------------
- *
- * ClientDone --
- *
- * Tell the server we're done. This is just done by closing
- * the pseudo stream.
- *
- * Results:
- * None
- *
- * Side effects:
- * None
- *
- *----------------------------------------------------------------------
- */
-
- void
- ClientDone(data)
- ClientData data;
- {
- ClientState *statePtr;
- register ReturnStatus status;
-
- statePtr = (ClientState *)data;
- if (close(statePtr->clientStreamID) < 0) {
- perror("ClientDone: error on close");
- }
- free((char *)statePtr);
- }
- @
-
-
- 1.1
- log
- @Initial revision
- @
- text
- @d4 1
- a4 1
- * The client part of some multi-program synchronization primatives.
- d13 1
- a13 1
- static char rcsid[] = "$Header: client.c,v 1.1 88/04/16 12:27:43 brent Exp $ SPRITE (Berkeley)";
- d19 2
- a20 1
- #include "io.h"
- d22 1
- d26 1
- a26 1
- extern Boolean select;
- d28 2
- a29 2
- char buffer[4096];
- int bufSize = sizeof(buffer);
- d60 1
- a60 1
- statePtr = (ClientState *)Mem_Alloc(sizeof(ClientState));
- d62 4
- a65 6
- status = Fs_Open(pdev, FS_READ|FS_WRITE, 0,
- &statePtr->clientStreamID);
- if (status != SUCCESS) {
- Stat_PrintMsg(status, "ClientSetup: error opening pseudo device");
- Io_Flush(io_StdErr);
- Proc_Exit(status);
- d96 1
- a96 1
- register char *buffer = (char *)Mem_Alloc(size);
- d99 5
- d107 1
- a107 1
- if (select) {
- d116 3
- a118 3
- status = Fs_Read(statePtr->clientStreamID, size, buffer, &amountRead);
- if (status != SUCCESS) {
- Stat_PrintMsg(status, "ClientRead: error on read");
- d121 1
- a121 1
- Io_PrintStream(io_StdErr, "Read #%d was short (%d < %d)\n",
- d125 2
- a126 2
- if (size > 0 && buffer[0] != 'z') {
- Io_PrintStream(io_StdErr, "Bad data returned <%c>\n", buffer[0]);
- d129 3
- a131 1
- Mem_Free(buffer);
- d139 1
- a139 1
- * Write from a pseudo-device. The amount and number of repetitions
- d160 1
- a160 1
- register char *buffer = (char *)Mem_Alloc(size);
- d162 5
- d169 3
- a171 3
- status = Fs_Write(statePtr->clientStreamID, size, buffer, &amountWrite);
- if (status != SUCCESS) {
- Stat_PrintMsg(status, "ClientWrite: error on read");
- d173 2
- a174 2
- } if (amountWrite != size) {
- Io_PrintStream(io_StdErr, "Short write %d < %d\n", amountWrite,
- d178 3
- a180 1
- Mem_Free(buffer);
- d210 2
- a211 2
- register char *inBuffer = (char *)Mem_Alloc(size);
- register char *outBuffer = (char *)Mem_Alloc(size);
- d214 6
- d235 4
- a238 2
- Mem_Free(inBuffer);
- Mem_Free(outBuffer);
- d266 2
- a267 3
- status = Fs_Close(statePtr->clientStreamID);
- if (status != SUCCESS) {
- Stat_PrintMsg(status, "ClientDone: error on close");
- d269 1
- @
-